<script>
    //1
    function job1() {
        return new Promise(function (resolve, reject) {
            reject();
        });
    }

    let promise1 = job1();

    promise1
        .then(function () { console.log('成功 1'); })
        .then(function () { console.log('成功 2'); })
        .then(function () { console.log('成功 3'); })
        .catch(function () { console.log('失败 1'); })
        .then(function () { console.log('成功 4'); });
    // 结果如何？

    // 2
    function job2(state) {
        return new Promise(function (resolve, reject) {
            if (state) {
                resolve('success');
            } else {
                reject('error');
            }
        });
    }

    let promise2 = job2(true);

    promise2
        .then(function (data) {
            console.log(data); // success
            return job2(false);
        })
        .catch(function (error) {
            console.log(error); // error
            return 'Error caught';
        })
        .then(function (data) {
            console.log(data); // 'Error caught'
            return job2(true);
        })
        .catch(function (error) {
            console.log(error);
        });
    // 结果如何？

    //3
    function job3(state) {
        return new Promise(function (resolve, reject) {
            if (state) {
                resolve('成功');
            } else {
                reject('错误');
            }
        });
    }

    let promise3 = job3(true);

    promise3
        .then(function (data) {
            console.log(data); // 成功
            return job3(true);
        })
        .then(function (data) {
            if (data !== '胜利') {
                throw '击败';
            }
            return job3(true);
        })
        .then(function (data) {
            console.log(data);
        })
        .catch(function (error) {
            console.log(error); // 击败
            return job3(false);
        })
        .then(function (data) {
            console.log(data);
            return job3(true);
        })
        .catch(function (error) {
            console.log(error); // '错误'
            return '捕获错误';
        })
        .then(function (data) {
            console.log(data); // '捕获错误'
            return new Error('测试');
            // return 失败的promise -> 失败
        })
        .then(function (data) {
            console.log('成功:', data.message); // 成功：测试
        })
        .catch(function (data) {
            console.log('错误:', data.message);
        });

</script>